﻿// 1054. 股票买卖.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>


using namespace std;
/*
https://www.acwing.com/file_system/file/content/whole/index/content/4183999/

给定一个长度为 N的数组，数组中的第 i
 个数字表示一个给定股票在第 i天的价格。

如果你最多只允许完成一笔交易（即买入和卖出一支股票），设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

输入格式
第一行包含整数 N，表示数组长度。

第二行包含 N 个不大于 109 的正整数，表示完整的数组。

输出格式
输出一个整数，表示最大利润。

数据范围
1≤N≤105,

输入样例1：
6
7 1 5 3 6 4
输出样例1：
5
输入样例2：
5
7 6 4 3 1
输出样例2：
0
样例解释
样例1：在第 2 天（股票价格 = 1）的时候买入，在第 5 天（股票价格 = 6）的时候卖出，最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为你不能在买入股票前卖出股票。

样例2：在这种情况下, 不进行任何交易, 所以最大利润为 0。
*/

const int N = 100010;
int arr[N];
int dp[N][3];
int n;

int main() {
	int lastbuy = 1e9 + 10;
	cin >> n;
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		int curr; cin >> curr;
		ans = max(ans, curr- lastbuy );
		lastbuy = min(lastbuy, curr);
	}

	cout << ans << endl;

	return 0;
}


//int main()
//{
//	cin >> n;
//	for (int i = 1; i <= n; i++) cin >> arr[i];
//	for (int i = 0; i <= n; i++) {
//		dp[i][0] = -99999999;
//		dp[i][1] = -99999999;
//	}
//	dp[0][0] = 0;
//
//	for (int i = 1; i <= n; i++) {
//		dp[i][0] = dp[i - 1][0];
//		dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - arr[i]);
//		dp[i][2] = max(dp[i - 1][2], dp[i - 1][1] + arr[i]);
//	}
//
//	cout << max(dp[n][2],max(dp[n][0], dp[n][1]));
//
//
//	return 0;
//}

 